DALL·E 2 解读 | 结合预训练 CLIP 和扩散模型实现文本 - 图像生成

date
Nov 2, 2022
Last edited time
Mar 27, 2023 08:45 AM
status
Published
slug
DALL·E2解读|结合预训练CLIP和扩散模型实现文本-图像生成
tags
DL
DDPM
summary
type
Post
Field
Plat
DALL·E 2 解读 | 结合预训练CLIP和扩散模型实现文本-图像生成
DALL·E 2 这个模型的任务很简单:输入文本text,生成与文本高度对应的图片。 它主要包括三个部分:CLIP,先验模块prior和img decoder。其中CLIP又包含text encoder和img encoder。(在看DALL·E 2之前强烈建议先搞懂CLIP模型的训练和运作机制) DALL·E 2是将其子模块分开训练的,最后将这些训练好的子模块拼接在一起,最后实现由文本生成图像的功能。 1. 训练CLIP,使其能够编码文本和对应图像 这一步是与CLIP模型的训练方式完全一样的,目的是能够得到训练好的text encoder和img encoder。这么一来,文本和图像都可以被编码到相应的特征空间。对应上图中的虚线以上部分。 2. 训练prior,使文本编码可以转换为图像编码 论文中对于该步骤作用的解释为: A prior P(z_i|y) that produces CLIP image embeddings z_i conditioned on captions y . 实际的训练过程为:将CLIP中训练好的text encoder拿出来,输入文本y,得到文本编码z_t。同样的,将CLIP中训练好的img encoder拿出来,输入图像 x 得到图像编码z_i。我们希望prior能从z_t获取相对应的z_i。假设z_t经过prior输出的特征为z_{i}^{'},那么我们自然希望z_{i}^{'}与z_i越接近越好,这样来更新我们的prior模块。最终训练好的prior,将与CLIP的text encoder串联起来,它们可以根据我们的输入文本y生成对应的图像编码特征z_i了。关于具体如何训练prior,有兴趣的小伙伴可以精度一下原文,作者使用了主成分分析法PCA来提升训练的稳定性。 在DALL·E 2 模型中,作者团队尝试了两种先验模型:自回归式Autoregressive (AR) prior 和扩散模型Diffusion prior [1]。实验效果上发现两种模型的性能相似,而因为扩散模型效率较高,因此最终选择了扩散模型作为prior模块。本文不具体解释扩散模型,大家可以查阅参考博文,或者我后期再整理相关知识。 3.
DALL·E 2 解读 | 结合预训练CLIP和扩散模型实现文本-图像生成

一、导读

notion image

论文信息

  • 论文标题: 《Hierarchical Text-Conditional Image Generation with CLIP Latents》
  • 作者 / 单位:Aditya Ramesh et al. / Open AI

二、DALL·E 2 模型解读

notion image

DALL·E 2 模型总览

DALL·E 2 这个模型的任务很简单:输入文本 text,生成与文本高度对应的图片。
它主要包括三个部分:CLIP先验模块 priorimg decoder。其中 CLIP 又包含 text encoder 和 img encoder。
notion image

DALL·E 2 训练过程

DALL·E 2 是将其子模块分开训练的,最后将这些训练好的子模块拼接在一起,最后实现由文本生成图像的功能。
1. 训练 CLIP,使其能够编码文本和对应图像
这一步是与 CLIP 模型的训练方式完全一样的,目的是能够得到训练好的 text encoder 和 img encoder。这么一来,文本和图像都可以被编码到相应的特征空间。对应上图中的虚线以上部分。
2. 训练 prior,使文本编码可以转换为图像编码
论文中对于该步骤作用的解释为:
A prior that produces CLIP image embeddings conditioned on captions .
实际的训练过程为:将 CLIP 中训练好的 text encoder 拿出来,输入文本 ,得到文本编码 。同样的,将 CLIP 中训练好的 img encoder 拿出来,输入图像 得到图像编码 。我们希望 prior 能从 获取相对应的 。假设 经过 prior 输出的特征为 ,那么我们自然希望 越接近越好,这样来更新我们的 prior 模块。最终训练好的 prior,将与 CLIP 的 text encoder 串联起来,它们可以根据我们的输入文本 生成对应的图像编码特征 了。关于具体如何训练 prior,有兴趣的小伙伴可以精度一下原文,作者使用了主成分分析法 PCA 来提升训练的稳定性。
notion image
在 DALL·E 2 模型中,作者团队尝试了两种先验模型:自回归式 Autoregressive (AR) prior 和扩散模型 Diffusion prior [1]。实验效果上发现两种模型的性能相似,而因为扩散模型效率较高,因此最终选择了扩散模型作为 prior 模块。本文不具体解释扩散模型,大家可以查阅参考博文,或者我后期再整理相关知识。
3. 训练 decoder 生成最终的图像
论文中对于该步骤作用的解释为:
A decoder that produces images conditioned on CLIP image embeddings (and optionally text captions ).
也就是说我们要训练 decoder 模块,从图像特征 还原出真实的图像 ,如下图左边所示。这个过程与自编码器类似,从中间特征层还原出输入图像,但又不完全一样。我们需要生成出的图像,只需要保持原始图像的显著特征就可以了,这样以便于多样化生成,例如下图右边的示例。\
notion image
notion image
DALL-E 2 使用的是改进的 GLIDE 模型。这个模型可以根据 CLIP 图像编码的 ,还原出具有相同与 有相同语义,而又不是与 完全一致的图像。

DALL·E 2 推理过程(由文本生成图像过程)

经过以上三个步骤的训练,已经可以完成 DALL·E 2 预训练模型的搭建了。我们这事丢掉 CLIP 中的 img encoder,留下 CLIP 中的 text encoder,以及新训练好的 prior 和 decoder。这么一来流程自然很清晰了:由 text encoder 将文本进行编码,再由 prior 将文本编码转换为图像编码,最后由 decoder 进行解码生成图像。
notion image

三、DALL·E 2 实验效果和不足之处

实验效果

看下 DALL·E 2 在 MS-COCO prompts 上的生成效果:
notion image

不足之处

本文作者提到了 DALL·E 2 的三个不足之处:
  1. DALL·E 2 容易将物体和属性混淆,比如下图 DALL·E 2(unCLIP) 与 GLIDE 的对比。提示的文字为:“a red cube on top of a blue cube”。
    1. notion image
      DALL·E 2 不容易将红色和蓝色分辨出来。这可能来源于 CLIP 的 embedding 过程没有将属性绑定到物体上;并且 decoder 的重建过程也经常混淆属性和物体,如下图所示,例如中间的柯基图片,有的重建结果将其帽子和领结的颜色搞反了。
      notion image
  1. DALL·E 2 对于将文本放入图像中的能力不足,如下图所示,我们希望得到一个写着 deep learning 的标志,而标志却将单词 / 词组拼写得很离谱。这个问题可能来源于 CLIP embedding 不能精确地从输入地文本提取出 “拼写” 信息。
notion image
3.DALL·E 2 在生成复杂场景图片时,对细节处理有缺陷,如下图所示生成 Times Square 的高质量图片。这个可能来源于 decoder 的分层(hierarchy)结构,先生成 64 × 64 的图像,再逐步上采样得到最终结果的。如果将 decoder 先生成的图像分辨率提高,比如从 64 × 64 提升到 128 × 128,那么这个问题可能可以缓解,但要付出更大计算量和训练成本的代价。
notion image

Reference

[1] Denoising diffusion probabilistic models
[2] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models.

© Lazurite 2021 - 2024